home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / circuits / spice2g6.z / spice2g6 / spice / Fortran / moseq1.f < prev    next >
Encoding:
Text File  |  1989-02-03  |  1.9 KB  |  68 lines

  1.       subroutine moseq1(vds,vbs,vgs,gm,gds,gmbs)
  2.       implicit double precision (a-h,o-z)
  3. c
  4. c     this routine evaluates the drain current and its derivatives
  5. c     using the shichman-hodges model and the charges associated
  6. c     with the gate, channel and bulk for mosfets
  7. c
  8. c spice version 2g.6  sccsid=mosarg 3/15/83
  9.       common /mosarg/ vto,beta,gamma,phi,phib,cox,xnsub,xnfs,xd,xj,xld,
  10.      1   xlamda,uo,uexp,vbp,utra,vmax,xneff,xl,xw,vbi,von,vdsat,qspof,
  11.      2   beta0,beta1,cdrain,xqco,xqc,fnarrw,fshort,lev
  12. c spice version 2g.6  sccsid=status 3/15/83
  13.       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
  14.      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon,
  15.      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile
  16. c spice version 2g.6  sccsid=knstnt 3/15/83
  17.       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
  18.      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox,
  19.      2   pivtol,pivrel
  20.       vbd=vbs-vds
  21.       vgb=vgs-vbs
  22. c
  23. c
  24.       if (vbs.gt.0.0d0) go to 102
  25.       sarg=dsqrt(phi-vbs)
  26.       go to 104
  27.   102 sarg=dsqrt(phi)
  28.       sarg=sarg-vbs/(sarg+sarg)
  29.       sarg=dmax1(0.0d0,sarg)
  30.   104 von=vbi+gamma*sarg
  31.       vgst=vgs-von
  32.       vdsat=dmax1(vgst,0.0d0)
  33.       if (sarg.gt.0.0d0) go to 105
  34.       arg=0.0d0
  35.       go to 108
  36.   105 arg=gamma/(sarg+sarg)
  37.   108 if (vgst.gt.0.0d0) go to 110
  38. c
  39. c     cutoff region
  40. c
  41.       cdrain=0.0d0
  42.       gm=0.0d0
  43.       gds=0.0d0
  44.       gmbs=0.0d0
  45.       go to 1000
  46. c
  47. c     saturation region
  48. c
  49.   110 betap=beta*(1.0d0+xlamda*vds)
  50.       if (vgst.gt.vds) go to 120
  51.       cdrain=betap*vgst*vgst*0.5d0
  52.       gm=betap*vgst
  53.       gds=xlamda*beta*vgst*vgst*0.5d0
  54.       gmbs=gm*arg
  55.       go to 1000
  56. c
  57. c     linear region
  58. c
  59.   120 cdrain=betap*vds*(vgst-0.5d0*vds)
  60.       gm=betap*vds
  61.       gds=betap*(vgst-vds)+xlamda*beta*vds*(vgst-0.5d0*vds)
  62.       gmbs=gm*arg
  63. c
  64. c     finished
  65. c
  66.  1000 return
  67.       end
  68.